/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.servlet.niceshot;

import br.com.pessoa.niceshot.PessoaQueries;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "SocioServlet", urlPatterns = {"/SocioServlet"})
public class SocioServlet extends HttpServlet {

    PessoaQueries pQueries = new PessoaQueries();

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("application/json");

        processRequest(request, response);

        try (PrintWriter out = response.getWriter()) {

            String idSocio = request.getParameter("id");
            String acao = request.getParameter("acao");
            if (acao.equals("remover")) {
                out.println(removeSocio(idSocio));
            } else {
                out.println(editSocio(idSocio));
            }

        }
    }

    private String editSocio(String idSocio) {
        Map<String, String> objSocio = pQueries.SelectByID(idSocio, "Socio");
        String JsonSocio = pQueries.HashMapToJson("Socio", objSocio);
        String JsonPessoa = pQueries.HashMapToJson("Pessoa", pQueries.SelectByID(objSocio.get("id_pessoa"), "Pessoa"));
        String dataJson = "{" + JsonSocio + "," + JsonPessoa + "}";

        return dataJson;
    }

    private String removeSocio(String idSocio) {
        int idPessoa = pQueries.idPessoaFk("Socio", "id_socio", idSocio);

        pQueries.RemoveData("Socio", "id_socio", idSocio);
        return pQueries.RemoveData("Pessoa", "id_pessoa", String.valueOf(idPessoa));
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
        try (PrintWriter out = response.getWriter()) {

            String idSocio = request.getParameter("id_socio");
            String nmPessoa = request.getParameter("nm_pessoa");
            String cdCpf = request.getParameter("cd_cpf");
            String cdRg = request.getParameter("cd_rg");
            String dtNascimento = request.getParameter("dt_nascimento");
            String nmEndereco = request.getParameter("nm_endereco");
            String cdTelefone = request.getParameter("cd_telefone");
            String nmEmail = request.getParameter("nm_email");

            nmEndereco = nmEndereco.replace("\n", " ");
            nmEndereco = nmEndereco.replace("\r", " ");
            cdCpf = cdCpf.replace(".", "");
            cdCpf = cdCpf.replace("-", "");

            LinkedHashMap<String, String> dataPessoa = new LinkedHashMap<String, String>();

            Date dateNascimento = new SimpleDateFormat("dd/MM/yyyy").parse(dtNascimento);
            dtNascimento = new SimpleDateFormat("yyyy-MM-dd").format(dateNascimento);

            int idPessoa = pQueries.idPessoaFk("Socio", "id_socio", idSocio);

            if (idPessoa == 0) {
                dataPessoa.put("id_pessoa", null);
            } else {
                dataPessoa.put("id_pessoa", String.valueOf(idPessoa));
            }

            dataPessoa.put("nm_pessoa", "'" + nmPessoa + "'");
            dataPessoa.put("cd_cpf", "'" + cdCpf + "'");
            dataPessoa.put("cd_rg", "'" + cdRg + "'");
            dataPessoa.put("dt_nascimento", "'" + dtNascimento + "'");
            dataPessoa.put("nm_endereco", "'" + nmEndereco + "'");
            dataPessoa.put("cd_telefone", "'" + cdTelefone + "'");
            dataPessoa.put("nm_email", "'" + nmEmail + "'");

            out.println(insertSocio(idSocio, dataPessoa));

        } catch (ParseException ex) {
            Logger.getLogger(SocioServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private String insertSocio(String idSocio, LinkedHashMap<String, String> dataPessoa) {

        if (dataPessoa.get("id_pessoa") == null) { // Se não retornar nenhum ID em Pessoa, grava-se os dois dados.. Já que a relação é sempre 1 pra 1            
            String idPessoa = pQueries.InsertPessoa(dataPessoa);
            LinkedHashMap<String, String> dataSocio = new LinkedHashMap<String, String>();
            dataSocio.put("id_socio", null);
            Calendar c = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date dt = c.getTime();
            dataSocio.put("dt_cadastro", "'" + sdf.format(dt) + "'");
            dataSocio.put("id_pessoa", idPessoa);
            return pQueries.InsertData("socio", dataSocio);
        } else {
            return pQueries.UpdateData("Pessoa", dataPessoa); // Apenas atualiza a tabela de Pessoa, pois Funcionário só possui o campo ID, este não sofre alteração
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "SocioServlet";
    }// </editor-fold>

}
